package pojo;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class Dom4jTest {
    /**
     * DOM4J
     * dom4j是一个非常非常优秀的Java XML API，具有性能优异、功能强大和极端易用使用的特点，
     * 同时它也是一个开放源代码的软件，可以在SourceForge上找到它。在对主流的Java
     * XML API进行的性能、功能和易用性的评测，这是必须使用的jar包，Hibernate用它来读写配置文件。
     * 学习链接：https://blog.csdn.net/redarmy_chen/article/details/12969219
     *
     * 1、基于树形结构，第三方组件
     * 2、解析速度快，效率高，使用的JAVA中的迭代器实现数据读取（Hibernate框架使用多）
     **/
    @Test
    public void test1() throws Exception {
        // 创建DOM4J的解析器对象
        SAXReader saxReader = new SAXReader();
        // 生成Document对象
        Document document = saxReader.read("src/books.xml");
        System.out.println(document);
    }

    /**
     * 读取books.xml文件生成book类
     **/
    @Test
    public void test2() throws DocumentException {
        //1.创建DOM4J的解析器对象
        SAXReader reader = new SAXReader();
        //2.读取文档
        Document document = reader.read("src/books.xml");
        //3.通过Document对象获取获取根节点元素对象
        Element rootElement = document.getRootElement();
        //4.通过根元素获取book标签对象
        List<Element> books = rootElement.elements("book");
        //5.遍历，处理每个book标签转换为book类
        for (Element book : books) {
            // asXML() 把标签对象，转换为标签字符串
            //System.out.println(book.asXML()); 将xml文件以字符串形式输出
            Element nameElement = book.element("name");
            //getText() 可以获取标签中的文本内容
            String name = nameElement.getText();
            //直接获取指定标签名的文本内容
            String price = book.elementText("price");
            String author = book.elementText("author");
            //attribute() 可以获取标签的属性
            String sn = book.attributeValue("sn");

            //创建一个book类对象
            System.out.println(new Book(sn, name, Double.parseDouble(price), author));
        }

    }

}
